# 1、记录错误
# 2、抛出错误
import logging
def foo(s):
    return 10 / int(s)

def bar(s):
    return foo(s) * 2

def main():
    # 1、直接调用会报错：弹出调用栈，结束运行
    # bar('0')
    try: 
        bar("0")
    except BaseException as e :
        # 同样是出错，但程序打印完错误信息后会继续执行，并正常退出：
        logging.exception(e)
        # raise语句如果不带参数，就会把当前错误原样抛出。
        raise
        # 在except中raise一个Error，还可以把一种类型的错误转化成另一种类型：
        # raise ValueError('input error!')
    print('main函数调用ending')

main()